message 認證符號 (MAC)
message authentication code
メッセージ認証符号 - Wikipedia
message の完全性を保證する
受信した message が、同じ祕密鍵を共有してゐる者が作った message であり改竄されてゐない事を保證できる
誤り檢出に似てるね
HMAC (hash-based message authentication code)
HMAC - Wikipedia
HMAC - Wikipedia
HMAC - MDN Web Docs 用語集 | MDN
$ {\rm HMAC}:=H((K~{\rm XOR}~{\rm opad})\|H((K~{\rm XOR}~{\rm ipad})\|{\rm message}))
$ H: SHA256 等の暗号學的 hash 函數
SHA256 を用ゐた場合は「HMAC-SHA256」と呼ぶ
$ K: 事前に共有した祕密鍵
hash 函數の block 長以下の長さである事
block 長より長い鍵は、hash 値を計算しそれを用ゐる
hash 函數の出力よりも長い事が推奬される
pad
hash 函數の block 長の byte 列を用意する。
64 byte の例
$ \rm opad: outer pad。0x36 (0b00110110) を 64 囘繰り返した byte 列
$ \rm ipad: inner pad。0x5C (0b01011100) を 64 囘繰り返した byte 列。$ \rm opadとは Hamming 距離 (4 になる) を離してある
$ \rm message: 檢證する對象となる message
計算式は伸張攻撃 (length extension attack) を防ぐものとなってゐる
Length extension attack - Wikipedia
Length Extension Attackの原理と実装 - CTFするぞ
伸張攻撃が成立すると、正當な message の後に僞の message を附加した message について檢證の通る HMAC を生成できてしまふ
digest から hash 函數の完了時の內部狀態を復元できると伸張攻撃が成立する
異なる padding を使って內外の hash 函數の初期狀態を變へる
外側の hash 函數を通す事で、digent に反映されてゐる內側の hash 函數の內部狀態を隱す
RFC 2104 (keyed-hashing for message authentication)
HMAC: メッセージ認証のための鍵付ハッシング
digital 署名は message 認證符號 (MAC)として使へる
Encrypt-then-MAC (EtM)
送信側は、平文を暗號化し、暗號文の message 認證符號 (MAC)を計算し message に附する
受信側は、message 認證符號 (MAC)を檢證し、その後に暗號文を復號化する
MAC-then-Encrypt (MtE) は、padding oracle 攻撃 (padding oracle attack) 等の、惡意有る暗號文を復號化する事自體を利用した攻撃を受ける
Padding oracle attack - Wikipedia